<?php
function getConnection() {
  global $db_name, $db_pwd, $db_url, $db_user;
  echo "<h1>current dir: ".`pwd`."</h1>";
  $conn = new mysqli($db_url, $db_user, $db_pwd, $db_name);
  if($conn->connect_error) {
    require_once 'helpers.php';
    array_push($_SESSION['errorMessages'], "Virhe tietokantayhteyden luomisessa: (virhenro $conn->connect_errno) $conn->connect_error");
    return false;
  }else {
    return $conn;
  }
}

/*
 * listTables,
 * haetaan metadataa ja listataan taulut
 */
function listTables() {
  $conn = getConnection();
  $resArray = array("server_info" => $conn->get_server_info(),
                    "client_info" => $conn->get_client_info(),
                    "connection_charset" => $conn->character_set_name(),
                    "connection_info" => $conn->host_info);
  return $resArray;
}

function ds_rawQuery($queryString) {
  echo "<h5>ds_rawQuery, parametri: <pre>'$queryString'</pre> </h5>";
  $db = getConnection();
  $res = $db->query($queryString);
  if(!$res) {
    $resultHash['Tapahtui virhe:'] = $db->error;
  }else {
    $rowsAffected = $db->affected_rows;
    $cols = $res->fetch_fields();
    $tmpArray = array();
    $resultArray = array();
    foreach($cols as $c) {
        array_push($tmpArray, $c->name);
    }
    array_push($resultArray, $tmpArray);
    while($row = $res->fetch_row()) {
      array_push($resultArray, $row);
    }
    
//    if(!isset($resultHash['rowsAffected'])) {
//      $resultHash['rowsAffected'] = $rowsAffected;
//    }
  }
  return $resultArray;
//  return $resultHash;
}

//Create - luodaan uusi rivi tai rivejä
//@ $colValuesArray voi olla joko yksiulotteinen (==1 rivi) tai kaksiulotteinen
// (==useita rivejä, yksi rivi on ulomman taulukon alkiona oleva taulukko
function createRow($tableName, $colNamesArray, $colValuesArray) {
  if(count($colNamesArray) < 1) {
    //Ei yhtään päivitettävää saraketta, ei vaivauduta tarkistamaan arvoja eikä luomaan yhteyttä db:hen.
    return -2;
  }
  
  $query = "INSERT INTO $tableName (".implode(",", $colNamesArray).") VALUES";
  
  if(($db = getConnection())) {
    if(!is_array($colValuesArray[0])) {
      //Vain yksi rivi lisätään, laitetaan se moniulotteiseen taulukkoon, niin riittää yks käsittelyalgoritmi
      $tmp = $colValuesArray;
      $colValuesArray = array();
      $colValuesArray[0] = $tmp;
    }
    
    $rowsDone = 0;
    foreach($colValuesArray as $row) {
      if($rowsDone > 0) {
        $query .= ",";
      }
      $query .= "(";
      for ($i=0; $i<count($colNamesArray); $i++) {
        //HUOM: tässä ei tarkisteta nyt, että arvojen ja sarakkeiden määrät täsmäävät,
        //      ylimääräiset arvot jäävät varoituksetta käyttämättä
        //      TODO: kirjoita lokiin varoitus tästä
        //TODO: turvatarkistus käyttäjän syöttämille arvoille
        if($i > 0) {
          $query .= ",";
        }
        $query .= "'$row[$i]'";
      }
      $query .= ")";
      $rowsDone++;
    }
    
    //Tehdään tietokantatemput
    if(!$db->query($query)) {
      echo "<h5>Tietskakantsuvirhe:</h5>\n";
      echo "<pre>$db->errno $db->error\nSQL-kyselyllä:\n$query\n</pre>";
    }else {
      //Kaikki onnistui
      return true;
    }
  }else {
    //Virhe, mutta getConnection huolehtii virheen ilmoittamisesta
    return false;
  }
  
}

?>
